package com.carbeauty.common.enums;

/**
 * 用户角色枚举
 * 
 * 角色权限说明:
 * - ADMIN: 系统管理员，拥有所有权限
 * - MANAGER: 店长，拥有门店管理权限
 * - EMPLOYEE: 员工，拥有基础业务操作权限
 * - CUSTOMER: 客户，只能查看自己的信息
 * 
 * @author CarBeauty Team
 */
public enum UserRole {
    
    /**
     * 系统管理员
     * 权限: 系统设置、用户管理、数据统计、所有业务功能
     */
    ADMIN("ADMIN", "系统管理员", "拥有系统所有权限"),
    
    /**
     * 店长
     * 权限: 门店管理、员工管理、业务统计、客户管理
     */
    MANAGER("MANAGER", "店长", "门店管理和业务统计权限"),
    
    /**
     * 员工
     * 权限: 客户服务、项目操作、库存查看
     */
    EMPLOYEE("EMPLOYEE", "员工", "基础业务操作权限"),
    
    /**
     * 客户
     * 权限: 查看个人信息、消费记录、余额查询
     */
    CUSTOMER("CUSTOMER", "客户", "个人信息查看权限");
    
    private final String code;
    private final String name;
    private final String description;
    
    UserRole(String code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getName() {
        return name;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据代码获取角色
     */
    public static UserRole fromCode(String code) {
        for (UserRole role : values()) {
            if (role.code.equals(code)) {
                return role;
            }
        }
        throw new IllegalArgumentException("未知的用户角色代码: " + code);
    }
    
    /**
     * 检查是否为管理员角色
     */
    public boolean isAdmin() {
        return this == ADMIN;
    }
    
    /**
     * 检查是否为管理层角色(管理员或店长)
     */
    public boolean isManager() {
        return this == ADMIN || this == MANAGER;
    }
    
    /**
     * 检查是否为员工角色(包含管理层)
     */
    public boolean isEmployee() {
        return this == ADMIN || this == MANAGER || this == EMPLOYEE;
    }
}
